package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;


import javax.swing.JComboBox;


import vista.RegistrarCategoria;

import modelo.Categoria;
import modelo.CategoriaDAO;
import modelo.Preparacion;
import modelo.PreparacionDAO;
import modelo.Producto;
import modelo.ProductoDAO;


public class ControladorRegistrarCategoria implements ActionListener {

	private RegistrarCategoria registrarCategoria;
	private  List<Categoria> categorias; 

	public ControladorRegistrarCategoria() {
		super();
		registrarCategoria = new RegistrarCategoria();
		this.registrarCategoria.addListener(this);
		this.registrarCategoria.setLocationRelativeTo(null);
		this.registrarCategoria.setVisible(true);
		limpiarCampos();	
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals("Incluir")){
			incluir();
			
		}
		else if (e.getActionCommand().equals("Modificar")){
			modificar();
		}
		else if (e.getActionCommand().equals("Eliminar")){
			eliminar();
		}
		else if (e.getActionCommand().equals("Nuevo")){
			limpiarCampos();
		}
		else if (e.getSource() instanceof JComboBox){
			cambioComboCategoria();
		}
	}
	public void incluir(){
			if ((!registrarCategoria.getTxtNombreCat().equals(""))){
				CategoriaDAO categoriaDAO = new CategoriaDAO();
				Categoria categoria= categoriaDAO.getCategoriaPorNombre(registrarCategoria.getTxtNombreCat());
			if (categoria==null){
				categoria = new Categoria();
				String n = registrarCategoria.getTxtNombreCat();
				categoria.setNombre(n);
				categoriaDAO.incluir(categoria);
				registrarCategoria.mostrarMensaje("Incluido");
				limpiarCampos();
			}
			else registrarCategoria.mostrarMensaje("Ya Existe");
			}
			else registrarCategoria.mostrarMensaje("Campo Vacio");
	}
	public void modificar(){
		if(!registrarCategoria.getTxtNombreCat().equals("")){
			Categoria categoria = new Categoria();
			CategoriaDAO categoriaDAO = new CategoriaDAO();
			categoria = categoriaDAO.getCategoriaPorCodigo(Integer.parseInt(registrarCategoria.getNroCodigo()));
			categoria.setNombre(registrarCategoria.getTxtNombreCat());
			categoriaDAO.actualizar(categoria);
			registrarCategoria.mostrarMensaje("Actualizado");
			limpiarCampos();
		}
		else registrarCategoria.mostrarMensaje("Campo Vacio");
	}
	public void eliminar(){
		if (registrarCategoria.getComboCategorias().equals(registrarCategoria.getTxtNombreCat())){
				CategoriaDAO categoriaDAO = new CategoriaDAO();
				Categoria categoria = categoriaDAO.getCategoriaPorNombre(registrarCategoria.getTxtNombreCat());
				ProductoDAO productoDAO = new ProductoDAO();
				List<Producto> productos = productoDAO.consultarProductos();
				for (int i= 0;i<productos.size();i++){
					Producto producto = productos.get(i);
					if (producto.getCat().getNombre().equals(registrarCategoria.getComboCategorias())){
						PreparacionDAO preparacionDAO = new PreparacionDAO();
						preparacionDAO.eliminarPorProducto(producto.getCodP());
						productoDAO.eliminar(producto);
						productos.remove(i);
					}
				}
				categoriaDAO.eliminar(categoria);
				limpiarCampos();
				registrarCategoria.mostrarMensaje("Se ha eliminado todo los productos de esta categoria");
		}
		else registrarCategoria.mostrarMensaje("Seleccione nuevamente");
		limpiarCampos();
	}
	public String[] arreCategorias(){
			CategoriaDAO categoriaDAO = new CategoriaDAO();
			categorias = categoriaDAO.consultar();
			int longitud= categoriaDAO.tamañoTabla();
			String[] arreCategorias = new String[(longitud+1)];
			arreCategorias[0] = "--";
			int j=1;
			for (int i=0;i<categorias.size();i++){
				Categoria categoria = categorias.get(i);
				if (categoria.getEstatus().equals("A")){
					arreCategorias[j]=categoria.getNombre();
					j++;
				}
		}
		return arreCategorias;
	}
	public void limpiarCampos(){
		CategoriaDAO categoriaDAO = new CategoriaDAO();
		categorias = categoriaDAO.consultar();
		registrarCategoria.setTxtNombreCat("");
		registrarCategoria.setComboCategorias(arreCategorias());
		registrarCategoria.setNroCodigo("");
		registrarCategoria.habilitarBotonIncluir(true);
		registrarCategoria.habilitarBotonModificar(false);
		registrarCategoria.habilitarBotonEliminar(false);
	}
	public void cambioComboCategoria(){
		if (!registrarCategoria.getComboCategorias().equals("--")){
		registrarCategoria.habilitarBotonEliminar(true);
		registrarCategoria.habilitarBotonModificar(true);
		registrarCategoria.habilitarBotonIncluir(false);
		CategoriaDAO categoriaDAO = new CategoriaDAO();
		Categoria categoria = categoriaDAO.getCategoriaPorNombre(registrarCategoria.getComboCategorias());
		registrarCategoria.setTxtNombreCat(categoria.getNombre());
		registrarCategoria.setNroCodigo(String.valueOf(categoria.getCodC()));
		}
		else limpiarCampos();
	}
}